// 引入express模块
const express = require('express')
// 得到应用实例
const app = express()
// 绑定端口
app.listen(3000, '0.0.0.0', () => console.log('http://localhost:3000'))

// 静态服务器
app.use(express.static('./public'))

// post数据接受处理
// application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: false }))
// application/json 
app.use(express.json())


let users = [
  { id: 1, name: '张三', age: 10 },
  { id: 2, name: '李四', age: 11 },
  { id: 3, name: '王五', age: 12 },
  { id: 4, name: '赵六', age: 13 }
]

// restfulApi接口规范
// get 一般用于数据的获取 200
// post 添加数据  201
// put/patch 修改数据 201/202  put全量更新/patch增量更新
// delete 删除数据 204(没有响应体)
// 定义请求路由
// app.http请求动作(get/post/put/delete)外两个express封装的方法(use/all)(请求地址，处理函数)
app.get('/users', (req, res) => {
  res.send(users)
})

app.get('/users/:id', (req, res) => {
  let data = users.find(({ id }) => id == req.params.id)
  res.send(data)
})

// post提交
app.post('/users', (req, res) => {
  let data = { id: Date.now(), ...req.body }
  users.push(data)
  res.send(data)
})

// put提交
app.put('/users/:id', (req, res) => {
  let index = users.findIndex(({ id }) => id == req.params.id)
  if (index < 0) {
    res.send({ code: -100 })
    return;
  }
  //  { id: 2 ,name: '李四1', age: 22},
  users[index] = { ...users[index], ...req.body }
  res.send(users[index])
})

// delete提交
app.delete('/users/:id', (req, res) => {
  // let index = users.findIndex(({ id }) => id == req.params.id)
  // users.splice(index, 1)
  users = users.filter(({ id }) => id != req.params.id)
  res.send(users)
})

// all 接受所有的请求动作 get/post/put/delete  一般不用
// 它还支持通配符 *
// 在不使用通配符的情况下，它是精确匹配
app.all('/all', (req, res) => {
  res.send(req.method)
})
// // * 如果上面的没有匹配成功则我匹配 匹配所有
// app.all('*', (req, res) => {
//   res.status(404).send('404页面')
// })

// use一般在express中用于【中间件】处理(洋葱圈模型)
// 模糊匹配，以定义的规则开就可以匹配成功 /use/a  /use/b  /use/c
// app.use('/use',(req,res)=>{
//   res.send(req.method)
// })

app.use((req, res) => {
  res.status(404).send('404页面')
})